/*/{Protheus.doc} SYNCCOD
E a User Function de geracao do layout COD (Tabela de Codigos) do Sistema Synchro
@author Elton Teodoro Alves
@since 14/11/2014
@version P11 R5
@Param aParam,Array,Array enviado pelo schudele
@Example
Esta User Function foi desenvolvida para ser utilizada com o Schudele, que passa como parametro para User Function um array com a seguinte configuracao:</br>
</br>
<table>
<tr><th> POSICAO </th><th> TIPO </th><th> DESCRICAO             </th></tr>
<tr><td> [01]    </td><td> C    </td><td> Codigo da Empresa     </td></tr>
<tr><td> [02]    </td><td> C    </td><td> Codigo da Filial      </td></tr>
<tr><td> [03]    </td><td> C    </td><td> Codigo do Agendamento </td></tr>
<tr><td> [04]    </td><td> C    </td><td> Codigo da Tarefa      </td></tr>
</table>
</br>	
Para teste fora do schudele, pode-se enviar para o SmartClient com a clausula -a estes dados separadas por virgula ',' Ex.: 99,01,0001,0001
/*/

#Define CRLF Chr(13) + Chr(10)
Static PERIOD := 'M'

#Include 'Protheus.ch'

User Function SYNCCOD(xParam)
	
	Local	cLayout		:=	Right(ProcName(),3)
	Local	aParam		:=	If(Valtype(xParam) == 'C',Separa(xParam,',',.T.),xParam)
	Local	aSyncEnv	:=	U_SYNCENV(aParam,cLayout,PERIOD)
	Local	cTrab		:=	GetNextAlias()
	Local	cTempTrab	:=	cLayout + Dtos(Date()) + StrTran(Time(),':','')
	Local	cTempFile	:=	GetSrvProfString("StartPath","") + cTempTrab + GetDbExtension()
	Local	cQuery		:=	''
	Local	cQueryBkp	:=	''
	Local	aStru		:=	{}
	Local	nX			:=	0
	Local	aFiliais	:=	StrTokArr(AllTrim(aSyncEnv[10]),'/',)
	Local	cFiliais	:=	''
	Local	nCount		:=	0
	
	// Monta a string com a lista de filiais para ser utilizada na query
	
	For nX := 1 To Len(aFiliais)
		
		cFiliais += "'" + aFiliais[nX] + "'"
		
		If nX # Len(aFiliais)
			
			cFiliais += ","
			
		End If
		
	Next nX
	
	// --------------------------------------------------------------
	// Monta estrutura do arquivo temporario com dados a serem exportados
	// --------------------------------------------------------------
	
	aAdd(aStru,{'POS0001','C',0006,0}) // CHAVE_LOTE
	aAdd(aStru,{'POS0007','C',0010,0}) // ORIGEM
	aAdd(aStru,{'POS0017','C',0040,0}) // CHAVE_ORIGEM
	aAdd(aStru,{'POS0057','C',0001,0}) // CTRL_INSTRUCAO
	aAdd(aStru,{'POS0058','C',0008,0}) // DT_INICIO
	aAdd(aStru,{'POS0066','C',0003,0}) // NUMERO
	aAdd(aStru,{'POS0069','C',0028,0}) // CODIGO
	aAdd(aStru,{'POS0097','C',0045,0}) // DESCRICAO
	aAdd(aStru,{'POS0142','C',0008,0}) // DT_FIM
	
	// --------------------------------------------------------------
	
	If aSyncEnv[6]
		
		// --------------------------------------------------------------
		// Montagem da query de pesquisa
		// --------------------------------------------------------------
		cQuery	+=	"SELECT " + CRLF
		cQuery	+=	"ZB5.ZB5_REFER POS0001," + CRLF
		cQuery	+=	"ZB5.ZB5_FILIAL	POS0007," + CRLF
		cQuery	+=	"'' POS0017," + CRLF
		cQuery	+=	"'M' POS0057," + CRLF
		cQuery	+=	"'19900101' POS0058," + CRLF
		cQuery	+=	"ZB5.ZB5_TABELA POS0066," + CRLF
		cQuery	+=	"ZB5.ZB5_CODIGO POS0069," + CRLF
		cQuery	+=	"ZB5.ZB5_DESCR POS0097," + CRLF
		cQuery	+=	"'47121231' POS0142" + CRLF
		
		cQuery	+=	"FROM " + RetSqlName("ZB5") + " ZB5" + CRLF
		
		cQuery	+=	"WHERE ZB5.ZB5_REFER LIKE '" + aSyncEnv[9] + "%' AND " + CRLF
		cQuery	+=	"ZB5.ZB5_FILIAL IN(" + cFiliais + ") AND " + CRLF
		cQuery	+=	"ZB5.D_E_L_E_T_ <> '*'"
		
		// --------------------------------------------------------------
		
		cQueryBkp	:=	cQuery
		
		cQuery := ChangeQuery(cQuery)
		
		If TcSqlExec(cQuery) < 0
			
			U_SYNCMAIL(AllTrim(aSyncEnv[15]),cLayout + ' - ' + AllTrim(aSyncEnv[17]),'Erro na execucao da query no banco de dados: ' + Chr(13) + Chr(10) + AllTrim(TcSqlError()),AllTrim(SubStr(aSyncEnv[4],1,6)),AllTrim(SubStr(aSyncEnv[4],7,6)),1,aSyncEnv[8],aSyncEnv[9])
			
		Else
			
			DbUseArea(.T.,"TOPCONN",TCGenQry(,,cQuery),cTrab,.F.,.T.)
			
			U_SYNCLOG(;
				'Agenda : ' +  SubStr(aSyncEnv[4],1,6) + CRLF +;
				'Tarefa : ' +  SubStr(aSyncEnv[4],7,6) + CRLF +;
				cLayout + ' - ' + AllTrim(aSyncEnv[17]) + CRLF +;
				'Query executada com sucesso: ' + CRLF + cQueryBkp)
			
			// Cria arquivo temporario
			
			fErase(Separa(cTempFile,'\',.T.)[3])
			DbCreate(cTempFile,aStru,__LocalDriver)
			DbUseArea(.T.,__LocalDriver,cTempFile,cTempTrab,.T.,.F.)
			
			U_SYNCLOG(;
				'Agenda : ' +  SubStr(aSyncEnv[4],1,6) + CRLF +;
				'Tarefa : ' +  SubStr(aSyncEnv[4],7,6) + CRLF +;
				'Arquivo Temporario criado com sucesso : ' + cTempFile)
			
			// --------------------------------------------------------------
			// Preenchimento do arquivo temporario
			// --------------------------------------------------------------
			
			(cTrab)->(DbGotop())
			
			Do While .Not. (cTrab)->(EOF())
				
				RecLock(cTempTrab,.T.)
				
				(cTempTrab)->POS0001 := (cTrab)->POS0001
				(cTempTrab)->POS0007 := U_SYNCFIL(aSyncEnv[7],5,(cTrab)->POS0007)
				(cTempTrab)->POS0017 := U_SYNCFIL(aSyncEnv[7],5,(cTrab)->POS0007) + (cTrab)->POS0066 + (cTrab)->POS0069
				(cTempTrab)->POS0057 := (cTrab)->POS0057
				(cTempTrab)->POS0058 := (cTrab)->POS0058
				(cTempTrab)->POS0066 := (cTrab)->POS0066
				(cTempTrab)->POS0069 := (cTrab)->POS0069
				(cTempTrab)->POS0097 := (cTrab)->POS0097
				(cTempTrab)->POS0142 := (cTrab)->POS0142
				
				MsUnLock()
				
				(cTrab)->(DbSkip())
				
				nCount++
				
			End Do
			
			// --------------------------------------------------------------
			
			U_SYNCDAT(cTempTrab,aSyncEnv,nCount)
			
			(cTrab)->(DbCloseArea())
			(cTempTrab)->(DbCloseArea())
			fErase(Separa(cTempFile,'\',.T.)[3])
			
		End IF
		
	Else
		
		U_SYNCLOG(;
			'Agenda : ' +  SubStr(aSyncEnv[4],1,6) + CRLF +;
			'Tarefa : ' +  SubStr(aSyncEnv[4],7,6) + CRLF +;
			'Nao foi possivel montar o ambiente de geracao do layout ' + cLayout)
		
	End IF
	
	RpcClearEnv()
	
Return
